Entity Relationship Mapping (ERM) হলো Spring Boot ORM-এর মাধ্যমে একাধিক Entity এর মধ্যে সম্পর্ক স্থাপন করার প্রক্রিয়া। এটি ডেটাবেস টেবিলের সম্পর্ক যেমন One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many কে Entity ক্লাসের মধ্যে মডেলিং করতে ব্যবহৃত হয়।
Entity Relationship Mapping-এর ধরন
One-to-One
একটি Entity-এর সাথে অন্য একটি Entity-এর এক-এক সম্পর্ক থাকে।
One-to-Many / Many-to-One
একটি Entity অনেকগুলো Entity এর সাথে সম্পর্কিত থাকতে পারে, কিন্তু অন্য Entity একটি মাত্র Entity এর সাথে সম্পর্কিত।
Many-to-Many
একাধিক Entity একে অপরের সাথে একাধিক সম্পর্কিত হতে পারে।
উদাহরণ: Entity Relationship Mapping
নিচে Employee এবং Department এর মধ্যে One-to-Many সম্পর্ক এবং Project এর সাথে Many-to-Many সম্পর্ক দেখানো হয়েছে।
Entity: Department
import jakarta.persistence.*;
import java.util.List;
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "department", cascade = CascadeType.ALL)
private List<Employee> employees;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
Entity: Employee
import jakarta.persistence.*;
import java.util.Set;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
@ManyToMany
@JoinTable(
name = "employee_project",
joinColumns = @JoinColumn(name = "employee_id"),
inverseJoinColumns = @JoinColumn(name = "project_id")
)
private Set<Project> projects;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Set<Project> getProjects() {
return projects;
}
public void setProjects(Set<Project> projects) {
this.projects = projects;
}
}
Entity: Project
import jakarta.persistence.*;
import java.util.Set;
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String projectName;
@ManyToMany(mappedBy = "projects")
private Set<Employee> employees;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
}
টেবিল স্কিমা (Database Schema)
Spring Boot চালু করার পর Hibernate নিম্নোক্ত টেবিলগুলো তৈরি করবে:
Department Table
CREATE TABLE department ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) );Employee Table
CREATE TABLE employee ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), department_id BIGINT, FOREIGN KEY (department_id) REFERENCES department(id) );Project Table
CREATE TABLE project ( id BIGINT AUTO_INCREMENT PRIMARY KEY, project_name VARCHAR(255) );Employee_Project Join Table
CREATE TABLE employee_project ( employee_id BIGINT, project_id BIGINT, PRIMARY KEY (employee_id, project_id), FOREIGN KEY (employee_id) REFERENCES employee(id), FOREIGN KEY (project_id) REFERENCES project(id) );
REST API উদাহরণ
EmployeeController
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeRepository employeeRepository;
@GetMapping
public List<Employee> getAllEmployees() {
return employeeRepository.findAll();
}
@PostMapping
public Employee createEmployee(@RequestBody Employee employee) {
return employeeRepository.save(employee);
}
}
উপসংহার
Entity Relationship Mapping এর মাধ্যমে ডেটাবেস টেবিলের মধ্যে সম্পর্ক Spring Boot এবং JPA ব্যবহার করে সহজে মডেল করা যায়। এটি ডেটাবেস অপারেশনকে আরও সংগঠিত, দ্রুত এবং উন্নত করে। @OneToOne, @OneToMany, @ManyToOne, এবং @ManyToMany অ্যানোটেশন ব্যবহার করে সম্পর্ক গঠন করা যায়।
Read more